// 打印调试等常用的 ES 工具函数
const chalk = require('chalk')
const _ = require('lodash')
const inquirer = require('inquirer').default

function noop() {}

function warn(tips) {
  console.log.call(console, chalk.yellow(`${tips}`))
}

function error(tips) {
  console.log.call(console, chalk.red(`${tips}`))
}

function success(tips) {
  console.log.call(console, chalk.green(`${tips}`))
}

function getGameAdderInfo() {
  return inquirer.prompt([
    {
      type: 'input',
      name: 'repoPath',
      message: '请输入仓库路径 (repoPath):'
    },
    {
      type: 'input',
      name: 'dirName',
      message: '请输入目录名称 (dirName):'
    },
    {
      type: 'input',
      name: 'dir',
      message: '请输入目录路径 (dir):'
    }
  ])
}

/**
 * 清理对象，去除空数组、空字符串、null 和 undefined
 *
 * @param obj 需要清理的对象
 * @returns 清理后的对象
 */
function clean(obj) {
  return _.transform(obj, (result, value, key) => {
    // 忽略空数组
    if (_.isArray(value) && value.length === 0) {
      return
    }

    // 递归清理嵌套的对象
    if (_.isObject(value)) {
      result[key] = clean(value)
    }

    // 忽略空字符串
    if (_.isString(value) && value.trim() === '') {
      return
    }

    // 忽略 null 和 undefined
    if (obj === null || obj === undefined) {
      return
    }

    result[key] = value
  })
}

module.exports = {
  noop,
  warn,
  error,
  success,
  clean,
  getGameAdderInfo
}
